package com.hjw.controller;

import com.hjw.service.IContentService;
import com.hjw.vo.ContentVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;

import java.util.HashMap;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author hjw
 * @since 2025-01-16
 */
@RestController
@RequestMapping("/content")
public class ContentController {

    private final IContentService contentService;

    @Autowired
    public ContentController(IContentService contentService) {
        this.contentService = contentService;
    }

    /**
     * 创建内容
     * @param content 内容对象
     * @param token 用户授权 token
     * @return 创建结果
     */
    @PostMapping
    public ResponseEntity<R<Content>> createContent(@RequestBody Content content, @RequestHeader("Authorization") String token) {
        return handleServiceResult(contentService.save(content), content, "内容创建失败");
    }

    /**
     * 更新内容
     * @param id 内容ID
     * @param content 内容对象
     * @param token 用户授权 token
     * @return 更新结果
     */
    @PutMapping("/{id}")
    public ResponseEntity<R<Content>> updateContent(@PathVariable Long id, @RequestBody Content content, @RequestHeader("Authorization") String token) {
        content.setId(id);  // 确保更新的是正确的内容
        return handleServiceResult(contentService.updateById(content), content, "内容更新失败");
    }

    /**
     * 删除内容
     * @param id 内容ID
     * @param token 用户授权 token
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<R<Void>> deleteContent(@PathVariable Long id, @RequestHeader("Authorization") String token) {
        return handleServiceResult(contentService.removeById(id), null, "内容删除失败");
    }

    /**
     * 获取内容列表
     * @param page 当前页码
     * @param size 每页条数
     * @param token 用户授权 token
     * @return 内容列表
     */
    @GetMapping
    public ResponseEntity<R<HashMap<String, Object>>> getContentList(
            @RequestParam int page,
            @RequestParam int size,
            @RequestHeader("Authorization") String token) {

        if (token == null || token.isEmpty()) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(R.fail("未授权访问"));
        }

        PageResult<Content> contents = contentService.findByPage(page, size);
        HashMap<String, Object> map = new HashMap<>();
        map.put("contents", contents);
        return ResponseEntity.ok(R.ok(map, "contents"));
    }

    /**
     * 搜索内容（分页）
     * @param page 当前页码
     * @param pageSize 每页条数
     * @param vo 搜索条件
     * @return 搜索结果
     */
    @PostMapping("/search/{page}/{pageSize}")
    public ResponseEntity<R<HashMap<String, Object>>> search(
            @PathVariable("page") Integer page,
            @PathVariable("pageSize") Integer pageSize,
            @RequestBody(required = false) ContentVo vo) {

        PageResult<Content> contents = contentService.search(page, pageSize, vo);
        HashMap<String, Object> map = new HashMap<>();
        map.put("contents", contents);
        return ResponseEntity.ok(R.ok(map, "contents"));
    }

    /**
     * 统一处理服务结果
     * @param success 服务操作结果
     * @param content 返回的内容
     * @param errorMessage 失败时的错误消息
     * @return 处理后的响应
     */
    private <T> ResponseEntity<R<T>> handleServiceResult(boolean success, T content, String errorMessage) {
        if (success) {
            return ResponseEntity.ok(R.ok(content));  // 返回操作结果
        }
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(R.fail(errorMessage));  // 失败时返回错误消息
    }
}

